package com.briup.common.response;

import lombok.Data;

/**
 * @Description：统一结果响应
 * @Author：qinyc
 * @Date：2024/07/03
 * @Version：1.0.0
 */
@Data
public class Result <T> {

    /**
     * FieldType：@see Integer
     * Description: 响应状态码
     */
    private Integer code;


    /**
     * FieldType：@see String
     * Description: 响应信息
     */
    private String message;


    /**
     * FieldType：@see T
     * Description: 响应数据
     */
    private T data;


    /**
     * @Description：构造方法私有化
     * @Author：qinyc
     * @Date：2024/07/03 10:27:05
     */
    private Result() {
    }

    /**
     * @Description：成功静态方法（默认）
     * @Author：qinyc
     * @Params：
     * @Return：@return {@link Result }
     * @Date：2024/07/03 10:27:20
     */
    public static Result success() {
        Result r = new Result();
        r.setCode(CodeAndMessageEnum.SUCCESS.getCode());
        r.setMessage(CodeAndMessageEnum.SUCCESS.getMessage());
        return r;
    }


    /**
     * @param data 数据
     * @Description：成功静态方法（带数据）
     * @Author：qinyc
     * @Return：@return {@link Result }<{@link T }>
     * @Date：2024/07/03 10:28:28
     */
    public static <T> Result<T> success(T data) {
        Result r = new Result();
        r.setCode(CodeAndMessageEnum.SUCCESS.getCode());
        r.setMessage(CodeAndMessageEnum.SUCCESS.getMessage());
        r.setData(data);
        return r;
    }


    /**
     * @param code 响应状态码
     * @param msg  响应信息
     * @Description：错误静态方法（根据响应状态码以及响应信息）
     * @Author：qinyc
     * @Return：@return {@link Result }
     * @Date：2024/07/03 10:28:49
     */
    public static Result error(int code, String msg) {
        Result r = new Result();
        r.setCode(code);
        r.setMessage(msg);
        return r;
    }


    /**
     * @param codeAndMessageEnum 统一响应枚举对象
     * @Description：失败静态方法
     * @Author：qinyc
     * @Return：@return {@link Result }
     * @Date：2024/07/03 10:29:48
     */
    public static Result error(CodeAndMessageEnum codeAndMessageEnum) {
        Result r = new Result();
        r.setCode(codeAndMessageEnum.getCode());
        r.setMessage(codeAndMessageEnum.getMessage());
        return r;
    }
}
